package com.ashin.hw;

import org.junit.Test;

import java.util.Arrays;

/**
 * 1、  请用递归和非递归的方法实现求解N的阶乘的函数。
 * 2、  给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
 * 请你找出这两个有序数组的中位数，并且要求算法的时间复杂度为 O(log(m + n))（复杂度要求可选，属于加分项）。
 * 你可以假设 nums1 和 nums2 不会同时为空。
 * 示例 1:                   示例 2:
 * nums1 = [1, 3]              nums1 = [1, 2]
 * nums2 = [2]                nums2 = [3, 4]
 * 则中位数是 2.0             则中位数是 (2 + 3)/2 = 2.5
 *
 * @author Ashin
 */
public class Hw2 {

    @Test
    public void testN() {
        System.out.println(n(6));
        System.out.println(niterator(6));
    }

    public int n(int n) {
        if (n == 1) {
            return n;
        }
        return n(n - 1) * n;
    }

    public int niterator(int n) {
        int result = 1;
        for (int nIdx = 1; nIdx <= n; nIdx++) {
            result *= nIdx;
        }

        return result;
    }

    @Test
    public void testMiddleNum() {
        int[] nums1 = {1, 2};
        int[] nums2 = {3, 4};
        middleNum(nums1, nums2);
    }


    public void middleNum(int[] nums1, int[] nums2) {
        // 合并
        int[] nums = new int[nums1.length + nums2.length];
        for (int i = 0; i < nums1.length; i++) {
            nums[i] = nums1[i];
        }

        for (int i = nums1.length; i < nums.length; i++) {
            nums[i] = nums2[i - nums1.length];
        }
        System.out.println(Arrays.toString(nums));

        // 排序
        Arrays.sort(nums);

        System.out.println(Arrays.toString(nums));

        // 基数 取中间
        if (nums.length % 2 != 0) {
            System.out.println(nums[nums.length / 2]);
        } else {
            System.out.println((nums[nums.length / 2] + nums[nums.length / 2 - 1]) / 2.0);
        }
    }


}
